package capitulo3;

import java.awt.Dimension;

/***************************************************************
 * Pasando variables por metodos como argumento (Objetivo 7.3)
 ***************************************************************
 * 7.3 Determinar el efecto sobre un objeto de referencia y otro primitivo
 * cuando se les pasa valores por los metodos que ejecutan asignaciones u otras
 * operaciones de modificacion en los parametros.
 * */

public class Tema20_VarComoArgum {

	public static void main(String[] args) {

		/* Pasando variables referenciando a objetos */
		/*
		 * Fijate que cuando el objeto Dimension es pasado en la linea 29 al
		 * metodo modify(), cualquier cambio en el objeto ocurre dentro del
		 * metodo, esta siendo hecho al objeto referenciado que se ha pasado por
		 * el argumento. En el ejemplo, la variable de referencia d y dim, ambos
		 * apuntan al mismo objeto.
		 */
		System.out.println("Pasando variables referenciando a objetos");
		Dimension d = new Dimension(5, 10);
		Tema20_VarComoArgum rt = new Tema20_VarComoArgum();
		System.out.println("Before modify() d.height = " + d.height);
		rt.modify(d);
		System.out.println("After modify() d.height = " + d.height);

		
		
		/* Pasando variables primitivas */
		/*
		 * Fijate que a no cambio despues de haber pasado por el metodo.
		 * Recuerda que era una copia. Cuando una variable primitiva se pasa por
		 * un metodo, se trata de una copia.
		 */

		System.out.println("\nPasando variables primitivas");
		int a = 1;
		Tema20_VarComoArgum rt2 = new Tema20_VarComoArgum();
		System.out.println("Before modify() a = " + a);
		rt.modify(a);
		System.out.println("After modify() a = " + a);
	}

	void modify(Dimension dim) {
		dim.height = dim.height + 1;
		System.out.println("dim = " + dim.height);
	}

	void modify(int number) {
		number = number + 1;
		System.out.println("number = " + number);
	}

}
